import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
 * Programa para verificar que la letra  y el formato del DNI es válido
 * 
 * @author Alberto Cruz
 *
 */

//Probamos modificando codigo
//Ahora vamos a probar a ver que ocurre modificando el codigo de forma concurrente, 
//es decir, modificar desde dos sitios el mismo codigo

//Ahora si podemos modificar el codigo sin problemas una vez sincroniado

public class TestValidarDni {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		String cadena="TRWAGMYFPDXBNJZSQVHLCKET";
		int opcion, num;
		String DNI;
		
		System.out.println("*********************************");
		System.out.println("     DNI VALIDATOR v2.5.7");
		System.out.println("*********************************\n");
		

		do{
			System.out.println("Menú Principal\n");
			System.out.println("1-. Comprobar veracidad de DNI.");
			System.out.println("2-. Obtener letra de DNI.");
			System.out.println("3-. Salir.");
			opcion=(int)Teclado.LeeEntero();
		
			switch(opcion){
				case 1:
					Pattern pattern = Pattern.compile("^[0-9]{8}[a-zA-Z]$");
					System.out.println("Introduce el DNI a verificar:");
					DNI=Teclado.LeeCadena();
					Matcher dni = pattern.matcher(DNI);
					
					if (!dni.find()) {
						System.out.println("ERROR: FORMATO INVALIDO: ");
					} 
					else {
						String numero=DNI.substring(0,8);
						num = Integer.parseInt(numero);
						num%=23;
						String letra=cadena.substring(num, num+1);
						if (letra.equalsIgnoreCase(DNI.substring(8,9))){
							System.out.println("DNI CORRECTO\n\n");
						}
						else{
							System.out.println("DNI FALSO\n\n");
						}
					}
				break;
					
				case 2:
					Pattern pattern2 = Pattern.compile("^[0-9]{8}$");
					System.out.println("Introduce en número de DNI:");
					DNI=Teclado.LeeCadena();
					Matcher dni2 = pattern2.matcher(DNI);
					if (!dni2.find()) {
						System.out.println("ERROR: FORMATO INVALIDO: ");
					} 
					else {
						num = Integer.parseInt(DNI);
						num%=23;
						String letra=cadena.substring(num, num+1);
						System.out.println("La letra de DNI es: "+letra+"\n\n");
					}
				break;
				
				case 3:
				break;
				
				default:
					System.out.println("Opción inválida\n\n");
			}
			
		}while(opcion!=3);
	}

}
